// pages/video/video.js
import request from '../../utils/request'
let i = 0
Page({

    /**
     * 页面的初始数据
     */
    data: {
        navList:[],//获取菜单列表数据
        navId:'',//默认的菜单id   
        videoList:[],//存储视频列表数据    
        videoId:'',// 正在播放的一个视频Id
        videoUpdateTimeList:[],//用来存储播放的视频vid和时间对象
        isTriggered:false//下来时刷新状态
    },
  
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        //从缓存中获取cookies数据，如果该数据不存在，就是没有登录，则需要跳转到登录页面
        const userInfo = wx.getStorageSync('userInfo')
        if(!userInfo){
          wx.showToast({
              title:'请您先登录',
              icon:'none'
          })
          wx.reLaunch({
            url: '/pages/login/login',
          })
          return
        }
        //获取导航菜单数据
        this.getNavListData()
        
    },
    //获取导航菜单数据
    async getNavListData(){
        const result = await request ('/video/group/list')
        const navList = result.data.slice(0,14)
        //更新数据
        this.setData({
            navList,
            navId:navList[0].id
        })
        //获取视频列表数据
        this.getVideoListData(this.data.navId)
    },
    //点击某个菜单设选中效果
    handlerChangeNavId(event){
        //获取当前点击的菜单的id值
        //下面的方式获取到的数据是字符串类型的值，（默认存储时数字类型的值）
        const navId = event.currentTarget.id
        //data-名字-->这种存储方式式number类型的值，取出来就是number类型的值
        //const navId = event.currentTarget.dataset.id
        //console.log(typeof navId)//string
        //更新数据
        this.setData({
            //navId:navId * 1 //将字符串类型的值转换为number类型的值
            navId: navId >>> 0,//位运算的 方式
            videoList:[],//清空之前的列表数据
        })
        // 获取视频列表数据
    this.getVideoListData(this.data.navId)
    },
    //根据菜单标签的id获取对应的视频列表数据
    async getVideoListData(navId){
        //设置对话框
        wx.showLoading({
          title: '加载中',
        })
        //下面接口是不能随便调用的，需要登录
        const videoListData = await request('/video/group',{id:navId})
        //关闭对话框
        wx.hideLoading()
        // console.log(navId)
        // console.log(videoListData)
        let index = 0
        const videoList = videoListData.datas.map(item=>{
            item.id = index++
            return item
        })
        //更新数据
        this.setData({
            videoList
        })
        //设置下拉关闭
        this.setData({
            isTriggered:false
        })
    },
    //播放视频===每次只播放一个视频
    handlerPlay(event){
        i++
        if(i !== 1){
            i = 0
            return
        }
        //获取视频id标识
        const vid = event.currentTarget.id
        //先定义上一个视频的播放
        // this.vid!==vid && this.videoContext&& this.videoContext.stop()
        //存储上一个视频VId==不是响应式数据
        // this.vid = vid
        //创建了一个播放视频的对象，不涉及页面变化，不用存储成响应式数据
        this.videoContext = wx.createVideoContext(vid)
        this.setData({
            videoId:vid
        })
        //获取存储视频vid和时间的对象的数组
        const{ videoUpdateTimeList}= this.data
        //从数组中找对象，看看当前播放的视频的对象在数组中是否存在
        const videoItem = videoUpdateTimeList.find(item=>item.vid == vid)
        if(videoItem){
            //跳转到指定的时间位置，继续播放
            this.videoContext.seek(videoItem.currentTime)
        }
        //播放视频
        this.videoContext.play()
    },
    //视频实时播放的对应的事件
    handlerUpdateTime(event){
        //获取存储视频vid和时间的对象的数组
        const{ videoUpdateTimeList}= this.data
        //定义一个对象用来存储当前正在播放的视频的vid和时间
        const updateTime = {
            vid:event.currentTarget.id,
            currentTime:event.detail.currentTime
        }
        //把对象存储到数组中
    const updateTimeItem = videoUpdateTimeList.find(item=>item.vid==updateTime.vid)
       //判断对象是否存在
       if(updateTimeItem){
           //更新当前时间
           updateTimeItem.currentTime=event.detail.currentTime
       } else{
           //该对象在数组中不存在
           videoUpdateTimeList.push(updateTime)
       }
       //更新数组数据
       this.setData({
           videoUpdateTimeList
       })
    },
    //播放视频结束
    handlerEnd(event){
     //获取当前播放视频结束的vid,在和数组的中的对象中的视频的vid进行对比
     const {videoUpdateTimeList} = this.data
     videoUpdateTimeList.splice(videoUpdateTimeList.findIndex(item=>item.id==event.currentTarget.id),1)
        //更新数组数据
       this.setData({
           videoUpdateTimeList
       })
    },
    //下拉刷新回调函数
    handlerRefresh(){
        this.getVideoListData(this.data.navId)
    },
    //下拉触底
    handlerTolower(){
        //获得原来的数组数据
        let {videoList} = this.data
        //做一个假数据 调用接口的方式来实现
        const videoArr  = [...videoList.slice(0,8)]
        //判断数据是否存在
        if(videoArr.length){
           videoList.push(...videoArr)
           //更新数据
           this.setData({
               videoList
           })
        }
    },
//跳转到search页面
toSearch(){
    wx.navigateTo({
      url: '/pages/search/search',
    })
},
    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady: function () {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function () {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {
        console.log('页面下拉了')
    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {
        console.log('页面上拉了')
    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function ({form}) {
        if(form=='button'){//此时用户点击的时三个点的按钮，进行转发操作
         return{
             title:'来自button转发',
             path:'/pages/video/video',
             imageUrl:'/static/images/lyml.jpg'
         }
        } else{
            //此时用户点击的是页面右上角的点击按钮，进行的转发
            return{
                title:'来自mennu的转发',
                path:'/pages/video/video',
                imageUrl:'/static/images/lyml.jpg'
            }            
        }
    }
})